const express = require('express');
const { body, param } = require('express-validator');
const CategoryController = require('../../controllers/CategoryController');
const { authenticateJWT, authorizeAdmin } = require('../../middleware/auth');

const router = express.Router();

// 公共接口
// 获取分类列表
router.get('/', CategoryController.getCategories);

// 获取分类详情
router.get('/:id', [
  param('id').isNumeric().withMessage('分类ID必须是数字')
], CategoryController.getCategoryDetail);

// 获取顶级分类
router.get('/top/list', CategoryController.getTopCategories);

// 获取分类树
router.get('/tree/list', CategoryController.getCategoryTree);

// 需要管理员权限的接口
// 创建分类
router.post('/', authenticateJWT, authorizeAdmin, [
  body('name').notEmpty().withMessage('分类名称不能为空').isLength({ max: 50 }).withMessage('分类名称不能超过50个字符'),
  body('icon').optional().isURL().withMessage('图标URL格式无效'),
  body('parentId').optional().isNumeric().withMessage('父分类ID必须是数字'),
  body('sortOrder').optional().isNumeric().withMessage('排序必须是数字')
], CategoryController.createCategory);

// 更新分类
router.put('/:id', authenticateJWT, authorizeAdmin, [
  param('id').isNumeric().withMessage('分类ID必须是数字'),
  body('name').optional().isLength({ max: 50 }).withMessage('分类名称不能超过50个字符'),
  body('icon').optional().isURL().withMessage('图标URL格式无效'),
  body('parentId').optional().isNumeric().withMessage('父分类ID必须是数字'),
  body('sortOrder').optional().isNumeric().withMessage('排序必须是数字'),
  body('status').optional().isIn(['enabled', 'disabled']).withMessage('无效的状态值')
], CategoryController.updateCategory);

// 删除分类
router.delete('/:id', authenticateJWT, authorizeAdmin, [
  param('id').isNumeric().withMessage('分类ID必须是数字')
], CategoryController.deleteCategory);

module.exports = router;